package data;

import data.dataStruct.Review;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import static data.Insert.updata;

public class Updata {
    //变更某个翻译员的显示状态
    public static boolean changeShowProfile(String id, String status){
        String sql="UPDATE translator SET visit=? WHERE id=?;";
        String[] strings={status,id};

        return updata(sql,strings);
    }

    //变更某个翻译员的证件照
    public static boolean changProfileImg(String id,String path){
        String sql="UPDATE translator SET image=? WHERE id=?;";
        String[] strings={path,id};

        return updata(sql,strings);
    }

    //修改翻译员的某一项信息
    public static boolean changProfileMessage(String id,String name,String msg){
        String sql="UPDATE translator SET "+name+"=? WHERE id=?;";
        String[] strings={msg,id};

        return updata(sql,strings);
    }

    //更改Review的信息
    public static boolean changReview(Review review){
        String sql="UPDATE review SET title=?,content=? WHERE tid=? AND id=?;";
        String[] strings={review.getTitle(),review.getContent()
                ,review.getTid(),review.getId()};

        return updata(sql,strings);
    }

    //变更某位翻译员的城市，因为这里我的要求是允许出错的，所以对过程没有进行事务化处理
    public static boolean changProfileCity(String id, List<String> citysId){
        //先删除该翻译员的所有城市信息。
        String sql="DELETE FROM translator_city WHERE tid=?;";
        String[] strings={id};
        updata(sql,strings);
        //再进行批处理插入翻译员的所有城市信息。
        sql="INSERT INTO translator_city(tid, cid) VALUES (?,?);";
        List<String[]> list=new ArrayList<>();
        for(int i=0;i<citysId.size();i++){
            String[] sqlWord={id,citysId.get(i)};
            list.add(sqlWord);
        }

        return updataBatch(sql,list);
    }

    //变更某位翻译员的语言
    public static boolean changeProfileLanguage(String id,List<String> languageId){
        //先删除该翻译员的所有城市信息。
        String sql="DELETE FROM translator_language WHERE tid=?;";
        String[] strings={id};
        updata(sql,strings);
        //再进行批处理插入翻译员的所有城市信息。
        sql="INSERT INTO translator_language(tid, lid) VALUES (?,?);";
        List<String[]> list=new ArrayList<>();
        for(int i=0;i<languageId.size();i++){
            String[] sqlWord={id,languageId.get(i)};
            list.add(sqlWord);
        }

        return updataBatch(sql,list);
    }

    //更新数据批处理
    public static boolean updataBatch(String sql,List<String[]> list){
        Connection connection=DatabaseManage.getConnection();

        try {
            PreparedStatement st=connection.prepareStatement(sql);
            //批处理
            for(int i=0;i<list.size();i++){
                for(int j=0;j<list.get(i).length;j++){
                    st.setString(j+1,list.get(i)[j]);
                }
                st.addBatch();
            }

            int[] rows=st.executeBatch();
            st.close();
            if(rows.length!=0){
                return true;
            }else {
                return false;
            }
        }catch (SQLException ex){
            ex.printStackTrace();
        }

        return false;
    }

    //修改管理员密码
    public static boolean changeRootMistake(String pwd){
        String sql="UPDATE root SET pwd=MD5(?);";
        String[] strings={pwd};

        return updata(sql,strings);
    }
}
